package com.share.example.stock.enums;

import lombok.Getter;

import java.util.Optional;

/**
 * @author syq
 * @data 2019/6/17
 */
@Getter
public enum ApiEnum {
    //股市代码数据
    stock_info_sh_name_code("stock_info_sh_name_code", "", 10000, "上海证券交易所股票代码和简称"),//需调用1次
    stock_info_sz_name_code("stock_info_sz_name_code", "", 10000, "深证证券交易所股票代码和简称"),//需调用1次
    stock_info_bj_name_code("stock_info_bj_name_code", "", 15000, "北京证券交易所股票代码和简称"),//需调用1次


    //公司基本信息
    stock_profile_cninfo("stock_profile_cninfo", "", 20000, "公司的基本数据----会封ip"),//需要调用4474次


    //板块数据
    stock_sector_spot("stock_sector_spot", "新浪", 10000, "板块行情"),//需要调用4次,一次查一个指标
    stock_sector_detail("stock_sector_detail", "新浪", 15000, "板块的成份详情"), //需要调用372次,一次查一个板块


    //实时行情--日数据
    stock_zh_a_spot_em("stock_zh_a_spot_em", "东财", 15000, "A股所有-实时行情数据---推荐使用"),//需调用1次
    stock_zh_a_spot("stock_zh_a_spot", "新浪", 10000, "A股所有-实时行情数据---封IP的"),//需调用1次


    //历史数据--日数据
    stock_zh_a_hist("stock_zh_a_hist", "东财", 10000, "历史行情数据"),  //调用n次
    stock_zh_a_daily("stock_zh_a_daily", "新浪", 10000, "历史行情数据----不推荐使用"), //调用n次


    //历史分时行情
    stock_zh_a_hist_min_em("stock_zh_a_hist_min_em", "东财", 10000, "A股-历史所有分时行情"),//调用n次


    //最近一个交易日分时
    stock_zh_a_minute("stock_zh_a_minute", "新浪", 10000, "返回指定股票所有历史分时行情数据"),//调用n次


    //盘前数据
    stock_zh_a_hist_pre_min_em("stock_zh_a_hist_pre_min_em", "东财", 10000, "返回指定当前交易日的股票分钟数据, 包含盘前分钟数据"),//调用n次
    tool_trade_date_hist_sina("tool_trade_date_hist_sina", "东财", 10000, "交易日历");//调用n次


    private String code;
    private String org;
    private Integer timeOut;
    private String descript;

    ApiEnum(String code, String org, Integer timeOut, String descript) {
        this.code = code;
        this.org = org;
        this.timeOut = timeOut;
        this.descript = descript;
    }

    public static ApiEnum toEnum(final String code) {
        for (final ApiEnum tag : ApiEnum.values()) {
            if (tag.code.equals(code)) {
                return tag;
            }
        }
        return null;
    }

    public static String toDescript(final String code) {
        return Optional.ofNullable(toEnum(code)).map(item -> item.descript).orElse(null);
    }
}
